/*
 * @Description: 组件注册
 * @Autor: HuiSir<273250950@qq.com>
 * @Date: 2020-09-25 10:20:54
 * @LastEditTime: 2021-02-18 11:31:07
 */
// 导入组件
import {
    BarChart,
    LineChart,
    TwoYAxis,
    PieChart,
} from './components/Charts'

// 存储组件列表
const components = {
    BarChart,
    LineChart,
    TwoYAxis,
    PieChart,
}

// 定义 install 方法
const install = function (Vue) {
    // 遍历注册全局组件
    Object.keys(components).forEach((key) =>
        Vue.component(components[key].name, components[key])
    )
}

// 判断是否是直接引入文件，如果直接引入的话，不使用Vue.use方法，而是直接执行install全局注册所有组件
// 因为全局引入vue文件只能全局注册外部组件库，而不能单个引用，所以直接执行install方法
if (typeof window !== 'undefined' && window.Vue) {
    install(window.Vue)
}

// 如此使用default导出可直接全部注册所有组件，亦可单个引用
// 由于单个组件导出时放到了default中，导入是需要使用`import obj form "x"`后通过`obj.BarChart`来取得单个组件。
// 调用时使用Vue.use(***)可以直接执行install方法
// Vue的use方法可传入一个对象或函数。若为对象，必须有install方法。若为函数，也会视为install方法。
// install方法执行时会传入Vue对象。
export default {
    install,
    ...components,
}

// 也可使用如下导出单个组件，导入时可使用`import {BarChart} from "xxx"`形式来获取组件
export {BarChart,LineChart,TwoYAxis,PieChart}

// 如下方式会报错。export不支持扩展运算符，而export default支持扩展运算符
// export {...components}